package csdwa;

import java.util.Random;

/**
 * This class provides a means to obfuscate text into latin. Thus, a site can
 * display that it has content but prevent users not logged in from reading the
 * content. This would be used to avoid spoilers and other information not meant
 * to be presented to the general public in the development stage.
 *
 * @author Anton Strack
 */
public class Obfuscator {

    public String obfuscate(String text) {
        StringBuilder sb = new StringBuilder();

        int smallMax = 175;
        int mediumMax = 333;
        int largeMax = 900;

        /**
         * The following section of code builds the obfuscated latin text by
         * first counting the length of the passed in text string. It then
         * applies the largest possible latin group first. The applied latin
         * text is random within the group however. Then it subtracts the length
         * of the text that was ofuscated into latin from the original text
         * length and tries the next largest group of latin text. it continues
         * this pattern until the length is zero or the execution reaches the
         * bottom of the if statements.
         */
        int length = text.length();
        if (length > largeMax + mediumMax + smallMax + largeMax) {
            length = length - (largeMax + mediumMax + smallMax + largeMax);
            sb.append(this.smallRandomLatin()).append(this.largeRandomLatin()).append(this.mediumRandomLatin()).append(this.largeRandomLatin());
        }
        if (length > largeMax + mediumMax + mediumMax + smallMax) {
            length = length - (largeMax + mediumMax + mediumMax + smallMax);
            sb.append(this.smallRandomLatin()).append(this.mediumRandomLatin()).append(this.largeRandomLatin()).append(this.mediumRandomLatin());
        }
        if (length > largeMax + smallMax + smallMax + smallMax + smallMax) {
            length = length - (largeMax + smallMax + smallMax + smallMax + smallMax);
            sb.append(this.smallRandomLatin()).append(this.mediumRandomLatin()).append(this.largeRandomLatin()).append(this.smallRandomLatin()).append(this.mediumRandomLatin());
        }
        if (length > largeMax + mediumMax + smallMax) {
            length = length - (largeMax + mediumMax + smallMax);
            sb.append(this.smallRandomLatin()).append(this.mediumRandomLatin()).append(this.largeRandomLatin());
        }
        if (length > largeMax + mediumMax) {
            length = length - (largeMax + mediumMax);
            sb.append(this.mediumRandomLatin()).append(this.largeRandomLatin());
        }
        if (length >= largeMax) {
            length = length - largeMax;
            sb.append(this.largeRandomLatin());
        }

        if (length > mediumMax + mediumMax + smallMax) {
            length = length - (largeMax + mediumMax);
            sb.append(this.mediumRandomLatin()).append(this.largeRandomLatin());
        }
        if (length > mediumMax + mediumMax + 50) {
            length = length - (mediumMax + mediumMax + 50);
            sb.append(this.mediumRandomLatin()).append(this.mediumRandomLatin());
        }
        if (length > mediumMax + mediumMax) {
            length = length - (mediumMax + mediumMax);
            sb.append(this.smallRandomLatin()).append(this.mediumRandomLatin()).append(this.smallRandomLatin());
        }
        if (length > mediumMax + smallMax) {
            length = length - (smallMax + mediumMax);
            sb.append(this.smallRandomLatin()).append(this.mediumRandomLatin());
        }
        if (length > mediumMax + 50) {
            length = length - (50 + mediumMax);
            sb.append(this.mediumRandomLatin()).append(this.smallRandomLatin());
        }
        if (length >= mediumMax) {
            length = length - mediumMax;
            sb.append(this.mediumRandomLatin()).append(this.smallRandomLatin());
        }


        if (length >= smallMax) {
            sb.append(this.smallRandomLatin()).append(this.smallRandomLatin());
        } else {
            sb.append(this.smallRandomLatin());
        }


        return sb.toString();
    }

    protected String smallRandomLatin() {
        String smallLatin1 = "<p>Praesent odio ligula, dapibus sed, tincidunt eget, dictum ac, nibh. Nam quis lacus.</p>";
        String smallLatin2 = "<p>Aliquam tincidunt feugiat elit. Duis sed elit ut turpis ullamcorper feugiat. Praesent pretium, mauris sed fermentum hendrerit, nulla lorem iaculis magna, pulvinar scelerisque urna tellus a justo.</p>";
        String smallLatin3 = "<p>Sed lobortis elit quis lectus. Nunc sed lacus at augue bibendum dapibus.</p>";
        String smallLatin4 = "<p>Curabitur nec massa ac massa gravida condimentum. Aenean id libero. Pellentesque vitae tellus.</p>";
        String smallLatin5 = "<p>Nulla iaculis egestas magna. Aliquam erat volutpat. Sed pellentesque orci. Etiam lacus lorem, iaculis sit amet, pharetra quis, imperdiet sit amet, lectus.</p>";
        String smallLatin6 = "<p>onec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi.</p>";

        Random ran = new Random();
        switch (ran.nextInt(6) + 1) {
            case 1: {
                return smallLatin1;
            }
            case 2: {
                return smallLatin2;
            }
            case 3: {
                return smallLatin3;
            }
            case 4: {
                return smallLatin4;
            }
            case 5: {
                return smallLatin5;
            }
            default: {
                return smallLatin6;
            }
        }
    }

    protected String mediumRandomLatin() {

        String mediumLatin1 = "<p>Vivamus facilisis diam at odio. Mauris dictum, nisi eget consequat elementum, lacus ligula molestie metus, non feugiat orci magna ac sem. Donec turpis. Donec vitae metus. Morbi tristique neque eu mauris. Quisque gravida ipsum non sapien.</p>";
        String mediumLatin2 = "<p>Vestibulum auctor tortor at orci. Integer semper, nisi eget suscipit eleifend, erat nisl hendrerit justo, eget vestibulum lorem justo ac leo. Integer sem velit, pharetra in, fringilla eu, fermentum id, felis. Vestibulum sed felis. In elit. Praesent et pede vel ante dapibus condimentum.</p>";
        String mediumLatin3 = "<p>Duis volutpat elit et erat. In at nulla at nisl condimentum aliquet. Quisque elementum pharetra lacus. Nunc gravida arcu eget nunc. Nulla iaculis egestas magna. Aliquam erat volutpat. Sed pellentesque orci. Etiam lacus lorem, iaculis sit amet, pharetra quis, imperdiet sit amet, lectus.</p>";
        String mediumLatin4 = "<p>Fusce convallis, mauris imperdiet gravida bibendum, nisl turpis suscipit mauris, sed placerat ipsum urna sed risus. In convallis tellus a mauris. Curabitur non elit ut libero tristique sodales. Mauris a lacus. Donec mattis semper leo. In hac habitasse platea dictumst. Vivamus facilisis diam at odio.</p>";
        String mediumLatin5 = "<p>Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc. Nullam arcu. Aliquam consequat. Curabitur augue lorem, dapibus quis, laoreet et, pretium ac, nisi. Aenean magna nisl, mollis quis, molestie eu, feugiat in, orci. In hac habitasse platea dictumst.</p>";

        Random ran = new Random();
        switch (ran.nextInt(5) + 1) {
            case 1: {
                return mediumLatin1;
            }
            case 2: {
                return mediumLatin2;
            }
            case 3: {
                return mediumLatin3;
            }
            case 4: {
                return mediumLatin4;
            }
            default: {
                return mediumLatin5;
            }

        }
    }

    protected String largeRandomLatin() {

        String largeLatin1 = "<p>Mauris dictum, nisi eget consequat elementum, lacus ligula molestie metus, non feugiat orci magna ac sem. Donec turpis. Donec vitae metus. Morbi tristique neque eu mauris. Quisque gravida ipsum non sapien. Proin turpis lacus, scelerisque vitae, elementum at, lobortis ac, quam. Aliquam dictum eleifend risus. In hac habitasse platea dictumst. Etiam sit amet diam. Suspendisse odio. Suspendisse nunc. In semper bibendum libero. Vivamus commodo, augue et laoreet euismod, sem sapien tempor dolor, ac egestas sem ligula quis lacus. Donec vestibulum tortor ac lacus. Sed posuere vestibulum nisl.</p>";
        String largeLatin2 = "<p>Donec imperdiet. Vestibulum auctor tortor at orci. Integer semper, nisi eget suscipit eleifend, erat nisl hendrerit justo, eget vestibulum lorem justo ac leo. Integer sem velit, pharetra in, fringilla eu, fermentum id, felis. Vestibulum sed felis. In elit. Praesent et pede vel ante dapibus condimentum. Donec magna. Quisque id risus. Mauris vulputate pellentesque leo. Duis vulputate, ligula at venenatis tincidunt, orci nunc interdum leo, ac egestas elit sem ut lacus. Etiam non diam quis arcu egestas commodo. Curabitur nec massa ac massa gravida condimentum. Aenean id libero. Pellentesque vitae tellus. Fusce lectus est, accumsan ac, bibendum sed, porta eget, augue. Etiam faucibus. Quisque tempus purus eu ante.</p>";
        String largeLatin3 = "<p>Vestibulum sapien nisl, ornare auctor, consectetuer quis, posuere tristique, odio. Fusce ultrices ullamcorper odio. Ut augue nulla, interdum at, adipiscing non, tristique eget, neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec sem eros, ornare ut, commodo eu, tempor nec, risus. Donec laoreet dapibus ligula. Praesent orci leo, bibendum nec, ornare et, nonummy in, elit. Donec interdum feugiat leo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque feugiat ullamcorper ipsum. Ut pede est, condimentum id, scelerisque ac, malesuada non, quam. Proin eu ligula ac sapien suscipit blandit. Suspendisse euismod. Ut accumsan, neque id gravida luctus, arcu pede sodales felis, vel blandit massa arcu eget ligula. Aenean sed turpis.  Donec convallis tincidunt urna.</p>";
        String largeLatin4 = "<p>Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque. Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc.</p>";
        String largeLatin5 = "<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Etiam faucibus. Quisque tempus purus eu ante.</p>";


        Random ran = new Random();
        switch (ran.nextInt(5) + 1) {
            case 1: {
                return largeLatin1;
            }
            case 2: {
                return largeLatin2;
            }
            case 3: {
                return largeLatin3;
            }
            case 4: {
                return largeLatin4;
            }
            default: {
                return largeLatin5;
            }
        }
    }
}
